<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
<!-- 
    reduce(callback,initValue)遍历数组并构建一个最终的值（归并）
    使用reduce实现数组去重：
    var arr2 = arr1.reduce(function (prev,curr){
        prev.indexOf(curr) === -1 && prev.push(curr);
        return prev;
    },[]);

    字符串：在JS中使用单引号或双引号括起来的字符
    创建字符串：
    var str1 = 'hello';
    var str2 = new String('hello');
    console.log(typeof str1);// 'string'
    console.log(typeof str2);// 'object'

    字符串也可以通过索引访问某个字符，索引从0开始
    字符串中的字符不能修改！
    字符串的length属性返回字符个数，是只读属性 str1.length = 3;无效的
    字符串使用 + 号进行拼接 'hello ' + 'world' -> 'hello world'

    遍历字符串：
    使用for循环遍历
    使用for/in遍历

    字符串方法：
    toLowerCase()将字符串转成小写字母
    toUpperCase()将字符串转成大写字母
    indexOf()查找字符串中指定子串第一次出现的索引，没有则返回-1
    lastIndexOf()查找字符串中指定子串最后一次出现的索引，没有则返回-1
    search()查找字符串中指定子串第一次出现的索引，没有则返回-1
        search()可以结合正则一起使用，indexOf()不可以结合正则使用
    trim()去掉字符串两端的空格
    substr(start,length)用于截取字符串
    substring(start,end)用于截取字符串(不包含end位置的字符)
    slice(start,end)用于截取字符串(不包含end位置的字符)
    split(分割符)将字符串分割成数组
    concat()用于合并字符串
    charAt()返回指定索引位置的字符 str1.charAt(0) == str1[0]
    replace(被替换的字符,用来替换的字符)用户替换字符串中的某个子串
    charCodeAt(索引)返回某个字符的unicode编码值（10进制）
    String.fromCharCode(编码值)返回指定编码值对应的字符

    冒泡排序：相邻两个数比较，互换位置
    function bubbleSort(arr){
        for (var n = 0; n < arr.length-1; n++){// 两两比较的轮数
            for (var i = 0; i < arr.length-1-n; i++){// 两两比较的次数
                // 前面的数大于后面的数时，互换位置（升序排列）
                if (arr[i] > arr[i+1]){
                    // 互换位置
                    var tmp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = tmp;
                }
            }
        }
        return arr;
    }
 -->

</body>
</html>